/*
 * ControleJogoServidor.java
 *
 * Created on 20 de Dezembro de 2006, 05:43
 *
 * To change this template, choose Tools | Template Manager
 * and open the template in the editor.
 */

package magchess10S.rn;

import java.rmi.Naming;
import java.rmi.RemoteException;
import java.rmi.registry.LocateRegistry;
import java.rmi.server.UnicastRemoteObject;
import java.util.HashMap;
import java.util.Map;

import magchess10.ClassesSO.IJogoClient;
import magchess10.rn.controle.Jogada;
import magchess10S.ClassesSO.IJogoServidor;
/**
 *
 * @author User
 */
public class ControleJogoServidor extends UnicastRemoteObject implements IJogoServidor {
    /**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	private DescritorMesa descritorMesa ;
//	private String portaAtual;
	private final Map<String, IJogoClient> mapaJogadores = new HashMap<String, IJogoClient> ();
    
    /** Creates a new instance of ControleJogoServidor */ 
    public ControleJogoServidor(DescritorMesa descritorMesa) throws RemoteException{
    super();
//    registrarServidor();
    this.descritorMesa = descritorMesa;
    }
    
    public ControleJogoServidor() throws RemoteException {
	super ();
	}
   
    
   
    
   
    
   
    
    public void solicitaAtualizacaoBP (String p_novaMensagem, int p_nomeJogador)
    {
    
    }

    public void SolicitaAtualizacaoStatusJogo() throws RemoteException {
    }

    public void SolicitaCriacaoPedidoDesistencia() throws RemoteException {
    }

    public void SolicitaCriacaoPedidoEmapte() throws RemoteException {
    }

    public void SolicitaEncerramentoJogo() throws RemoteException {
    }

    public void SolicitaIncrementoRepositorio(int p_numeroRepositorio) throws RemoteException {
    }

    public void registrarClienteServidor(int numeroPorta,String nomeCliente) throws RemoteException {
        try {
			String ipCliente="localhost";
			mapaJogadores.put(nomeCliente,(IJogoClient) Naming.lookup("rmi://" + ipCliente + ":" + numeroPorta + "/" + nomeCliente ));
            
            
        } catch (Exception e){
            System.out.println(e.toString());
        }
        
    }


    
    public void solicitaAtualizacaoTabuleiros (Jogada jogada) 
    {
    	String nomeJogador = getNomeJogadorById (jogada.getIdJogador());
    	IJogoClient jogoClient = null;
    	for (String key : mapaJogadores.keySet()) {
    		if (!key.equals(nomeJogador) )
    			try {
    				jogoClient= mapaJogadores.get(key);
					jogoClient.atualizaTabuleiros(jogada);
				} catch (RemoteException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
    	}
    	
    	
        
    }
    

    
    
    
    private String getNomeJogadorById(int idJogador) {
		return descritorMesa.getNomeJogadorPosicao(idJogador);
		
	}

	private void registrarServidor()
    {
        try
        {
         LocateRegistry.createRegistry(1099);
            Naming.rebind("rmi://127.0.0.1:1099/JogoServidor", this);
            System.out.println("OK");
        }
        catch (Exception e)
        {
            System.out.println(e.toString());
            e.printStackTrace();
        }
    }

	
    
    
    
}
